// 打包开发环境
import { dirname, resolve } from "path";
import { fileURLToPath } from "url";
import { parseArgs } from "util";
import * as esbuild from 'esbuild'
import type { Format } from 'esbuild'; // 注意使用 type 导入类型
import { createRequire } from "module";

/**
 * 解析命令行参数
 */
const { values: { format }, positionals } = parseArgs({
    allowPositionals: true,
    options: {
        format: {
            type: 'string',
            short: 'f',
            default: 'esm'
        }
    }
})

// 创建 esm 的 __filename
const __filename = fileURLToPath(import.meta.url)

// 创建 esm 的 __dirname
const __dirname = dirname(__filename)

const require = createRequire(import.meta.url)

const target = positionals.length ? positionals[0] : 'vue'

const entry = resolve(__dirname, `../packages/${target}/src/main.ts`)

/**
 * --format cjs or esm
 * cjs ==> reactive.cjs.js
 * esm ==> reactive.esm.js
 * @type {string}
 */
const outfile = resolve(__dirname, `../packages/${target}/dist/${target}.${format}.js`)

const pkg = require(`../packages/${target}/package.json`)
console.log('pkg==>', pkg);


esbuild.context({
    entryPoints: [entry], // 入口文件
    outfile, // 输出文件
    format: format as Format, // 打包格式
    platform: format === 'cjs' ? 'node' : 'browser', // 打包平台 node browser
    sourcemap: true, // 开启sourcemap 方便调试
    bundle: true, // 把所有的依赖打包到一个文件中
    globalName: pkg.buildOptions.name
}).then(ctx => ctx.watch())

console.log('开始打包', outfile);